package main

import (
	"bytes"
	// "encoding/base64"
	"fmt"
	"image"
	"image/draw"
	"image/png"
	"io/ioutil"
	"net/http"
	"os"
)

func readPNG(filename string) (image.Image, error) {
	f, err := os.Open(filename)
	if err != nil {
		return nil, err
	}
	defer f.Close()
	return png.Decode(f)
}

func main() {

	fmt.Println("---------start--------")
	resp, err := http.Get("http://7xohdn.com2.z0.glb.qiniucdn.com/1.png")
	fmt.Println(err)
	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	fmt.Println("---body-----", fmt.Sprintf("%T", body), len(body), err)

	fmt.Println("----image---")
	resp, err = http.Get("http://7xohdn.com2.z0.glb.qiniucdn.com/1.png")
	fmt.Println(err)
	defer resp.Body.Close()
	png_img, _, err := image.Decode(resp.Body)
	// buf := new(bytes.Buffer)
	// err = png.Encode(buf, img1)
	// send_s3 := buf.Bytes()
	// fmt.Println("---body-----", fmt.Sprintf("%T", send_s3), len(send_s3), err, format)
	// f, _ := os.Create("test_aaaaa.png") //创建文件
	// defer f.Close()                     //关闭文件
	// png.Encode(f, img1)

	//读原图片
	// png_img, _ := readPNG("1.png")
	encoder := png.Encoder{}
	encoder.CompressionLevel = -1

	buf := new(bytes.Buffer)
	err = encoder.Encode(buf, png_img)
	send_s3 := buf.Bytes()
	fmt.Println("---body-----", fmt.Sprintf("%T", send_s3), len(send_s3), err, png_img.At(450, 800))

	size := png_img.Bounds()
	pic := image.NewGray(size)
	fmt.Println("img1", png_img.Bounds().Min, png_img.Bounds().Max)
	draw.Draw(pic, size, png_img, png_img.Bounds().Min, draw.Src)
	buf_gray := new(bytes.Buffer)
	encoder.CompressionLevel = -1
	err = encoder.Encode(buf_gray, pic)
	send_s3_gray := buf_gray.Bytes()
	fmt.Println("---end-----", fmt.Sprintf("%T", send_s3_gray), len(send_s3_gray), err, pic.Bounds().Max, pic.Bounds().Min, len(pic.Pix))
	// ff, _ := os.Open("1.png")
	// defer ff.Close()
	// sourcebuffer := make([]byte, 500000)
	// n, _ := ff.Read(sourcebuffer)
	// //base64压缩
	// fmt.Println(n)
	// sourcestring := base64.StdEncoding.EncodeToString(sourcebuffer[:n])

	// // //写入临时文件
	// // ioutil.WriteFile("a.png.txt", []byte(sourcestring), 0667)
	// // //读取临时文件
	// // cc, _ := ioutil.ReadFile("a.png.txt")

	// //解压
	// dist, _ := base64.StdEncoding.DecodeString(string(sourcestring))
	// //写入新文件
	// fmt.Println(len(dist))
	// f, _ := os.OpenFile("b.png", os.O_RDWR|os.O_CREATE, os.ModePerm)
	// defer f.Close()
	// f.Write(dist)
}
